#ifndef STATE_H
#define STATE_H

#include "Event.hpp"

/**
 * Parent class for al event type classes.
 */
class State
{
public:
	/**
	 * Enumeration of state types.
	 * Describes the states the robot can have.
	 */
	enum StateType
	{
		CROSSROADS,
		EMERGENCYSTOP,
		ERROR,
		FOLLOWCOLORLANE,
		FREESTYLE,
		TURNOVERONCOLORLANE
	};

	virtual ~State()
	{

	}

	/**
	 * Pure virtual state
	 */
	virtual void handleEvent(Event& event) = 0;

	/**
	 * Pure virtual state
	 */
	virtual void startState() = 0;

	/**
	 * Get the type of this state
	 */
	virtual StateType getStateType() = 0;
protected:
	State() { };
	State(State const&) { };
};
#endif
